package com.zg.scf.domain.req.product;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zg.common.core.dao.QueryCondition;
import com.zg.common.core.req.AddReq;
import io.swagger.annotations.ApiModel;
import lombok.Data;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

/**
 * DESCRIPTION
 *
 * @author zhanfeng.liang
 * @since 2025-07-14
 */

@Data
@ApiModel(value = "产品类型AddReq")
public class ProductTypeAddReq extends AddReq {

    /**
     * 产品类型（如：企业经营贷、供应链融资等）
     */
    @NotEmpty(message = "产品类型不能为空")
    private String productType;

    /**
     * 额度区间-低（万元），客户可申请的最低贷款金额
     */
    @NotNull(message = "额度区间-低不能为空")
    private BigDecimal amountLow;

    /**
     * 额度区间-高（万元），客户可申请的最高贷款金额
     */
    @NotNull(message = "额度区间-高不能为空")
    private BigDecimal amountHigh;

    /**
     * 利率区间-低（%），实际执行利率的最小值
     */
    @NotNull(message = "利率区间-低不能为空")
    private BigDecimal rateLow;

    /**
     * 利率区间-高（%），实际执行利率的最大值
     */
    @NotNull(message = "利率区间-高不能为空")
    private BigDecimal rateHigh;

    /**
     * 贷款期限-低（年），客户可选择的最短贷款期限
     */
    @NotNull(message = "贷款期限-低不能为空")
    private Integer termLow;

    /**
     * 贷款期限-高（年），客户可选择的最长贷款期限
     */
    @NotNull(message = "贷款期限-高不能为空")
    private Integer termHigh;

    /**
     * 适用场景（国内/国际）
     */
    @NotEmpty(message = "适用场景不能为空")
    private String applicableScenario;

    /**
     * 是否信用贷（1:是, 0:否）
     */
    @NotNull(message = "是否信用贷不能为空")
    private Integer isCredit;

    /**
     * 是否抵押（1:是, 0:否）
     */
    @NotNull(message = "是否抵押不能为空")
    private Integer isMortgage;

    /**
     * 是否担保（1:是, 0:否）
     */
    @NotNull(message = "是否担保不能为空")
    private Integer isGuarantee;

    /**
     * 是否缴纳保证金（1:缴纳, 0:不缴纳）
     */
    @NotNull(message = "是否缴纳保证金不能为空")
    private Integer isDeposit;

    /**
     * 还款方式（多选，用逗号分隔，如：等额本息,按月付息到期还本）
     */
    @NotEmpty(message = "还款方式不能为空")
    private String repaymentMethod;

    /**
     * 授信审批时间-开始（预计最早完成时间）
     */
    @NotNull(message = "授信审批时间-开始不能")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date approvalTimeLow;

    /**
     * 授信审批时间-结束（预计最晚完成时间）
     */
    @NotNull(message = "授信审批时间-结束不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date approvalTimeHigh;

    /**
     * 放款审批时间-开始（预计最早完成时间）
     */
    @NotNull(message = "放款审批时间-开始不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date disbursementTimeLow;

    /**
     * 放款审批时间-结束（预计最晚完成时间）
     */
    @NotNull(message = "放款审批时间-结束不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date disbursementTimeHigh;

    /**
     * 产品分类（应收类、预付类、存货类等）
     */
    @NotEmpty(message = "产品分类不能为空")
    private String productCategory;

    private String state;
}
